package com.cy.wenxinapi.util;

/**
 * @author: c
 * @date: 2024/2/26 10:16
 * @description:  自定义一个缓存
 */

import org.springframework.stereotype.Component;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;

@Component
public class InMemoryCacheSingleton {

    // 使用线程安全的HashMap作为内存缓存
    private final Map<String, Object> cache = new ConcurrentHashMap<>();

    /**
     * 存储数据到缓存中
     *
     * @param key   缓存键
     * @param value 缓存值
     */
    public void put(String key, Object value) {
        cache.put(key, value);
    }

    /**
     * 从缓存中获取数据
     *
     * @param key 缓存键
     * @return 如果找到则返回对应的缓存值，否则返回null
     */
    public Object get(String key) {
        return cache.get(key);
    }

    /**
     * 删除指定键的数据
     *
     * @param key 要删除的缓存键
     */
    public void remove(String key) {
        cache.remove(key);
    }

    /**
     * 清空整个缓存
     */
    public void clear() {
        cache.clear();
    }

    /**
     * 获取缓存中的所有键集合
     *
     * @return 包含所有缓存键的Set集合
     */
    public Set<String> getAllKeys() {
        return cache.keySet();
    }

    public Collection<Map.Entry<String, Object>> getByPrefix(String prefix) {
        List<Map.Entry<String, Object>> prefixedEntries = new ArrayList<>();
        for (Map.Entry<String, Object> entry : cache.entrySet()) {
            if (entry.getKey().startsWith(prefix)) {
                prefixedEntries.add(entry);
            }
        }
        return prefixedEntries;
    }
}
